import eventBus from "@/utils/eventBus-ts";
import { Toast } from "antd-mobile";
import axios, { AxiosError } from "axios";

const request = axios.create({
  baseURL: "/api",
  timeout: 5000,
});

request.interceptors.request.use(
  (config) => {
    // 统一处理请求头，携带token
    const token = localStorage.getItem("token");
    console.log(token);    
    if (token) {
      config.headers["x-auth-token"] = token;
    }
    return config;
  },
  (err) => Promise.reject(err)
);
request.interceptors.response.use(
  (res) => {
    // 正常来说应该在这里进行统一的错误处理 ， 判断 code/errCode 
    return res.data;
  },
  (err:AxiosError<MyResponse<any>>) => {
    // console.log(err);
    // 进行统一的错误处理 -- 该项目比较特殊，才导致我们在这里面处理
    // 提示
    Toast.show({
      content: err.response?.data.message,
      icon: 'fail',
    })
    // 在这里处理登录失效的情况
    // errCode 如果是1002 就是登录失效 - 取决于后端给的文档，不是所有的公司都是 1002
    if(err.response?.data.errCode === 1002){
      // 清空一些缓存的数据
      // token
      localStorage.removeItem('token');
      // 用户身份相关的 - vip内容...
      // 强制跳转到登录页
      // 现在非要在这跳转不可，跳转非hook不可  --->  管这种情况为：强依赖(强耦合) --> 选择使用 订阅发布模式解决
      eventBus.emit('logintimeout');
    }
  }
);

export default request;